package tests;

import network.Device;
import network.Network;
import network.Port;
import network.Rule;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class I2Network {
    public static Network getNetwork() {
        Network n = new Network();
        String[] devicenames = {"atla", "chic", "hous", "kans", "losa", "newy32aoa", "salt", "seat", "wash"};

        n.addDevice("default");

        int t = 0;
        for (String name : devicenames) {
            n.addDevice(name);
            n.addLink(name, "default", "default", name + "-peer-default");
        }
        n.addLink("chic", "xe-0/1/0", "newy32aoa", "xe-0/1/3");
        n.addLink("chic", "xe-1/0/1", "kans", "xe-0/1/0");
        n.addLink("chic", "xe-1/1/3", "wash", "xe-6/3/0");
        n.addLink("hous", "xe-3/1/0", "losa", "ge-6/0/0");
        n.addLink("kans", "ge-6/0/0", "salt", "ge-6/1/0");
        n.addLink("chic", "xe-1/1/2", "atla", "xe-0/1/3");
        n.addLink("seat", "xe-0/0/0", "salt", "xe-0/1/1");
        n.addLink("chic", "xe-1/0/2", "kans", "xe-0/0/3");
        n.addLink("hous", "xe-1/1/0", "kans", "xe-1/0/0");
        n.addLink("seat", "xe-0/1/0", "losa", "xe-0/0/0");
        n.addLink("salt", "xe-0/0/1", "losa", "xe-0/1/3");
        n.addLink("seat", "xe-1/0/0", "salt", "xe-0/1/3");
        n.addLink("newy32aoa", "et-3/0/0-0", "wash", "et-3/0/0-0");
        n.addLink("newy32aoa", "et-3/0/0-1", "wash", "et-3/0/0-1");
        n.addLink("chic", "xe-1/1/1", "atla", "xe-0/0/0");
        n.addLink("losa", "xe-0/1/0", "seat", "xe-2/1/0");
        n.addLink("hous", "xe-0/1/0", "losa", "ge-6/1/0");
        n.addLink("atla", "xe-0/0/3", "wash", "xe-1/1/3");
        n.addLink("hous", "xe-3/1/0", "kans", "ge-6/2/0");
        n.addLink("atla", "ge-6/0/0", "hous", "xe-0/0/0");
        n.addLink("chic", "xe-1/0/3", "kans", "xe-1/0/3");
        n.addLink("losa", "xe-0/0/3", "salt", "xe-0/1/0");
        n.addLink("atla", "ge-6/1/0", "hous", "xe-1/0/0");
        n.addLink("atla", "xe-1/0/3", "wash", "xe-0/0/0");
        n.addLink("chic", "xe-2/1/3", "wash", "xe-0/1/3");
        n.addLink("atla", "xe-1/0/1", "wash", "xe-0/0/3");
        n.addLink("kans", "xe-0/1/1", "salt", "ge-6/0/0");
        n.addLink("chic", "xe-1/1/0", "newy32aoa", "xe-0/0/0");

        // int pri = 32;
        for (Device device : n.getDevicesWithoutDefault()) {
            String name = device.getName();
            File inputFile = new File("i2/" + name + "apnotcomp");
            Scanner line = null;
            try {
                line = new Scanner(inputFile);
                line.useDelimiter("\n");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                System.exit(0);
            }

            while (line.hasNext()) {
                String lineStr = line.next();
                String[] tokens = lineStr.split(" ");
                if (tokens[0].equals("fw")) {
                    String portName = tokens[3].split("\\.")[0];
                    Port p = device.getPortByName(portName);
                    if (p == null) {
                        System.out.println("Error: p shouldn't be null");
                    }
                    Rule rule = new Rule(device, Long.parseLong(tokens[1]), Integer.parseInt(tokens[2]), p);
                    // if (Integer.parseInt(tokens[2]) < pri) pri = Integer.parseInt(tokens[2]);
                    n.addInitialRules(rule);
                }
            }
        }

        // System.out.println(pri);
        return n;
    }
}
